package cn.devices.controller;


import cn.devices.dto.DeviceDto;
import cn.devices.dto.TaskDto;
import cn.devices.entity.TbInventory;
import cn.devices.entity.TbTask;
import cn.devices.model.JsonMessage;
import cn.devices.service.TbCodeGenService;
import cn.devices.service.TbInventoryService;
import cn.devices.service.TbTaskService;
import cn.devices.utils.SubjectType;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.config.Task;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 设备盘点任务表 前端控制器
 * </p>
 *
 * @author 秋水浮萍
 * @since 2021-02-07
 */
@RestController
@RequestMapping("/tb-task")
public class TbTaskController {

    @Autowired
    private TbTaskService tbTaskService;

    @Autowired
    private TbCodeGenService genService;

    @Autowired
    private TbInventoryService tbInventoryService;

    /**
     * 发起盘点任务
     *
     * @return
     */
    @GetMapping("tbTaskAdd")
    public JsonMessage tbTaskAdd() {
        JsonMessage message = new JsonMessage();
        TbTask tbTask = new TbTask();
        tbTask.setTaskId(genService.genCode(SubjectType.TASK));
        tbTask.setStartTime(new Date());
        //进行中
        tbTask.setTaskStatus("1");
        tbTaskService.taskAdd(tbTask);
        message.setData(tbTask.getTaskId());
        message.setMessage("ok");
        return message;
    }

    /**
     * 删除
     *
     * @param taskId
     * @return
     */
    @GetMapping("tbTaskDelete")
    public JsonMessage tbTaskDelete(String taskId) {
        JsonMessage message = new JsonMessage();
        tbTaskService.taskDelete(taskId);
        message.setData("删除成功");
        return message;
    }

    /**
     * 结束或强制中断 跟新盘点信息 并返回
     *
     * @return
     */
    @GetMapping("tbTaskUpdate")
    public JsonMessage tbTaskUpdate(String taskId, String taskStatus, String taskSpec) {
        JsonMessage message = new JsonMessage();
        //总件数 ，借出件数
        TaskDto dto = tbTaskService.taskDto();
        //实际在库件数 ， 故障件数
        TaskDto dto2 = tbTaskService.taskDto2(taskId);
        //理论借出件数
        dto.setTheorySurCount(dto.getTotalCount() - dto.getBorrowCount());
        TbTask tbTask = new TbTask();
        tbTask.setTaskId(taskId);
        tbTask.setTaskStatus(taskStatus);
        tbTask.setTaskSpec(taskSpec);
        //在库件数
        tbTask.setInStock(dto2.getRealSurCount());
        //借出件数
        tbTask.setOutStock(dto.getBorrowCount());
        //异常件数 =故障件数+理论在库件数-实际在库件数
        tbTask.setWarnStock(dto2.getMalfunctionCount() + dto.getTheorySurCount() - dto2.getRealSurCount());


        tbTask.setEndTime(new Date());
        tbTaskService.taskUpdate(tbTask);
        List<DeviceDto> list = tbTaskService.deviceDtoList1(taskId);

        List<String> device = new ArrayList<>();
        for (DeviceDto devices : list
        ) {
            device.add(devices.getDeviceCode());
        }
        tbInventoryService.tbInventoryAdds(device, taskId);


        message.setData(tbTaskService.tbTaskById(taskId));
        return message;
    }

    /**
     * 根据id查询 盘点信息
     *
     * @param taskId
     * @return
     */
    @GetMapping("tbTaskById")
    public JsonMessage tbTaskById(String taskId) {
        JsonMessage message = new JsonMessage();
        TbTask tbTask = tbTaskService.tbTaskById(taskId);
        //如果盘点进行中 进行盘点信息操作
        if ("1".equals(tbTask.getTaskStatus())) {
            //总件数 ，借出件数
            TaskDto dto = tbTaskService.taskDto();
            //实际在库件数 ， 故障件数
            TaskDto dto2 = tbTaskService.taskDto2(tbTask.getTaskId());
            //理论借出件数
            dto.setTheorySurCount(dto.getTotalCount() - dto.getBorrowCount());

            //在库件数
            tbTask.setInStock(dto2.getRealSurCount());
            //借出件数
            tbTask.setOutStock(dto.getBorrowCount());
            //异常件数 =故障件数+理论在库件数-实际在库件数
            tbTask.setWarnStock(dto2.getMalfunctionCount() + dto.getTheorySurCount() - dto2.getRealSurCount());
        }
        message.setData(tbTask);
        return message;
    }

    /**
     * 盘点任务列表
     *
     * @param pageIndex
     * @param pageSize
     * @return
     */
    @GetMapping("tbsTaskList")
    public JsonMessage tbsTaskList(@RequestParam(defaultValue = "1") int pageIndex,
                                   @RequestParam(defaultValue = "10") int pageSize) {
        JsonMessage message = new JsonMessage();
        PageInfo<TbTask> pageInfo = tbTaskService.tbTaskList(pageIndex, pageSize);
        message.setData(pageInfo);
        return message;
    }

    @GetMapping("getByTaskList")
    public JsonMessage getByTaskList() {
        JsonMessage message = new JsonMessage();
        List<TbTask> pageInfo = tbTaskService.getByTaskList();
        message.setData(pageInfo);
        return message;
    }

    @GetMapping("deviceDtoList")
    public JsonMessage deviceDtoList(String taskId) {
        JsonMessage message = new JsonMessage();
        List<DeviceDto> list2 = tbTaskService.deviceDtoList3(taskId);

        message.setData(list2);
        return message;
    }
}
